package main

import (
	"fmt"
	"os"

	"github.com/spf13/cobra"
	"techoiceness.com/aiagent/llm-gateway/internal/config"
	"techoiceness.com/aiagent/llm-gateway/internal/database"
	"techoiceness.com/aiagent/llm-gateway/internal/entity"
	"techoiceness.com/aiagent/llm-gateway/internal/logger"

	"github.com/rs/zerolog/log"
)

var createAdminCmd = &cobra.Command{
	Use:   "create-admin <用户名> <密码>",
	Short: "创建新管理员",
	Long:  `创建一个新的管理员账户`,
	Args:  cobra.ExactArgs(2),
	Run: func(cmd *cobra.Command, args []string) {
		// 初始化日志系统
		logger.Initialize()

		username := args[0]
		password := args[1]

		// 检查密码强度
		if len(password) < 6 {
			log.Error().Msg("错误: 密码长度必须至少为6个字符。")
			os.Exit(1)
		}

		log.Info().Msg("正在创建新管理员...")
		cfg, err := config.LoadConfig()
		if err != nil {
			log.Error().Err(err).Msg("加载配置失败")
			os.Exit(1)
		}

		db, err := database.NewDatabase(&cfg.Database)
		if err != nil {
			log.Fatal().Err(err).Msg("连接数据库失败")
		}

		log.Info().Str("username", username).Msg("正在创建新管理员...")

		// 检查用户名是否存在
		var count int64
		if err := db.Model(&entity.Admin{}).Where("username = ?", username).Count(&count).Error; err != nil {
			log.Fatal().Err(err).Str("username", username).Msg("检查管理员用户名是否存在失败")
		}
		if count > 0 {
			log.Fatal().Str("username", username).Msg("管理员用户名已存在")
		}

		// 创建管理员
		admin := entity.Admin{
			Username: username,
			Password: password, // BeforeCreate 钩子会自动加密
			Role:     entity.AdminRoleAdmin,
			IsActive: true,
		}

		if err := db.Create(&admin).Error; err != nil {
			log.Fatal().Err(err).Str("username", username).Msg("创建管理员失败")
		}

		log.Info().Str("username", username).Str("admin_id", admin.ID.String()).Str("role", string(admin.Role)).Msg("管理员创建成功")

		fmt.Printf("\n🎉 已成功创建管理员:\n")
		fmt.Printf("   用户名: %s\n", username)
		fmt.Printf("   管理员ID: %s\n", admin.ID.String())
		fmt.Printf("   角色: %s\n", admin.Role)
	},
}
